import request from './request';

/**
 * 获取角色列表
 * @param {Object} params - 查询参数
 * @param {number} params.page - 页码
 * @param {number} params.pageSize - 每页数量
 * @param {string} params.name - 角色名称
 * @param {string} params.code - 角色编码
 * @param {boolean} params.status - 状态
 * @returns {Promise<Object>} 角色列表数据
 */
export const getRoleList = (params) => {
  return request({
    url: '/roles',
    method: 'get',
    params,
  });
};

/**
 * 获取单个角色信息
 * @param {number} id - 角色ID
 * @returns {Promise<Object>} 角色信息
 */
export const getRole = (id) => {
  return request({
    url: `/roles/${id}`,
    method: 'get',
  });
};

/**
 * 创建角色
 * @param {Object} data - 角色数据
 * @param {string} data.name - 角色名称
 * @param {string} data.code - 角色编码
 * @param {string} data.description - 角色描述
 * @param {boolean} data.status - 状态
 * @param {number} data.sort - 排序
 * @returns {Promise<Object>} 创建的角色数据
 */
export const createRole = (data) => {
  return request({
    url: '/roles',
    method: 'post',
    data,
  });
};

/**
 * 更新角色
 * @param {number} id - 角色ID
 * @param {Object} data - 角色数据
 * @param {string} data.name - 角色名称
 * @param {string} data.description - 角色描述
 * @param {boolean} data.status - 状态
 * @param {number} data.sort - 排序
 * @returns {Promise<Object>} 更新后的角色数据
 */
export const updateRole = (id, data) => {
  return request({
    url: `/roles/${id}`,
    method: 'put',
    data,
  });
};

/**
 * 删除角色
 * @param {number} id - 角色ID
 * @returns {Promise<void>}
 */
export const deleteRole = (id) => {
  return request({
    url: `/roles/${id}`,
    method: 'delete',
  });
};

/**
 * 批量删除角色
 * @param {Array<number>} ids - 角色ID数组
 * @returns {Promise<void>}
 */
export const batchDeleteRoles = (ids) => {
  return request({
    url: '/roles/batch',
    method: 'delete',
    data: { ids },
  });
};

/**
 * 更新角色状态
 * @param {number} id - 角色ID
 * @param {boolean} status - 状态
 * @returns {Promise<void>}
 */
export const updateRoleStatus = (id, status) => {
  return request({
    url: '/roles/status',
    method: 'post',
    data: { id, status },
  });
};

/**
 * 获取用户角色列表
 * @param {number} userId - 用户ID
 * @returns {Promise<Array>} 用户角色列表
 */
export const getUserRoles = (userId) => {
  return request({
    url: '/roles/userRoles',
    method: 'get',
    params: { userId },
  });
};

/**
 * 为用户分配角色
 * @param {number} userId - 用户ID
 * @param {Array<string>} roleCodes - 角色编码数组
 * @returns {Promise<void>}
 */
export const assignRolesToUser = (userId, roleCodes) => {
  return request({
    url: '/roles/assign',
    method: 'post',
    data: { userId, roleCodes },
  });
};

/**
 * 获取所有角色（不分页）
 * @returns {Promise<Array>} 角色列表
 */
export const getAllRoles = () => {
  return request({
    url: '/roles/all',
    method: 'get',
  });
};